#include "StdAfx.h"
#include "CMateriales.h"
#include "CMaterial.h"
#include "soil.h"

CMateriales::CMateriales()
{
}

CMateriales::~CMateriales(void)
{
}

void CMateriales::loadFile(char *pFilename)
{
	char line[256];
	char nombreMat[256];
	char nombreKd[256];
	float ka[3],kd[3],ks[3];
	int i=0, soilkd=0;
	FILE *file=NULL;
	int error=0;
//	fopen_s(&file,pFilename,"r");
	//si hay archivo
	//if(file!=0)
	error=fopen_s(&file,pFilename,"r");
	if(error==0)
	{
		//Lee una linea mientras no llegue al final del archivo
		while(!feof(file))
		{
			fgets(line, 256, file);
			if(line[0]=='n' && line[1]=='e' && line[2]=='w' && line[3]=='m' && line[4]=='t' && line[5]=='l')
			{
				sscanf(line,"newmtl %s",&nombreMat);

				fgets(line, 256, file);
				if(line[0]=='K' && line[1]=='a')
				{
					sscanf(line,"Ka %f %f %f", &ka[0],&ka[1],&ka[2]);
				}
				fgets(line, 256, file);
				if(line[0]=='K' && line[1]=='d')
				{
					sscanf(line,"Kd %f %f %f", &kd[0],&kd[1],&kd[2]);
				}
				fgets(line, 256, file);
				if(line[0]=='K' && line[1]=='s')
				{
					sscanf(line,"Ks %f %f %f", &ks[0],&ks[1],&ks[2]);
				}
				//while(!feof(file))
				//{
				fgets(line, 256, file);
				fgets(line, 256, file);
					fgets(line, 256, file);
					if(line[0]=='m' && line[1]=='a' && line[2]=='p' && line[3]=='_' && line[4]=='K' && line[5]=='d')
					{	
						
						if(sscanf(line,"map_Kd %s",nombreKd)==0)
							nombreKd[0]=0;
						else
							sscanf(line,"map_Kd %s",nombreKd);
					}
					soilkd=SOIL_load_OGL_texture(nombreKd, 0, 0, 0);
				//}
				CMaterial *mat=new CMaterial();
				mat->setNombre(nombreMat);
				mat->setKd(kd);
				mat->setKa(ka);
				mat->setKs(ks);
				mat->setMap_kd(nombreKd);
				mat->setSoil_kd(soilkd);
				listMat[i]=mat;
				i++;
			}//2 if
		}//while
	}else{
		printf("Archivo incorrecto - Clase CMateriales");
	}
}

void CMateriales::setMaterial(char *pName)
{
	boolean encontrado = false;
	int i = 0;
	while(!encontrado && i < 256){
		if(strcmp(listMat[i]->getNombre(), pName)==0){
			
			glMaterialfv(GL_FRONT, GL_SPECULAR, listMat[i]->getKs());
			glMaterialfv(GL_FRONT, GL_DIFFUSE, listMat[i]->getKd());
			glMaterialfv(GL_FRONT, GL_AMBIENT, listMat[i]->getKa());


			
			return;
		}
	}
}

void CMateriales::setTexture(char *pName)
{
	boolean encontrado = false;
	int i = 0;
	while(!encontrado && i < 256){
		if(strcmp(listMat[i]->getNombre(), pName)==0){
			

			glEnable(GL_TEXTURE_2D);
			glBindTexture(GL_TEXTURE_2D, listMat[i]->getSoil_kd());

			return;
		}
	}
}

